home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Very Best of Atari Inside
/
The Very Best of Atari Inside 1.iso
/
sharew
/
dfue
/
fax
/
fddk
/
fddk.txt
< prev
next >
Wrap
Text File
|
1992-02-02
|
9KB
|
227 lines
--------------------------------
| |
| F D D K |
| |
| FAXDRIVER DEVELOPMENT KIT |
| |
--------------------------------
Der Inhalt dieses Folders darf kopiert und weitergegeben
werden, solange er nicht verändert wird.
Folgende Dateien gehören dazu:
FDDK.TXT (diese Datei)
QFAXDRV.O (das eigentliche Faxmodul)
QFAXDRV.H (der dazugehörige ANSI-C-Header)
MINIDEMO.C (wie der Name schon sagt..)
MINIDEMO.PRJ (das dazugehörige Turbo-C Project-File)
ASC_FAX.C (konvertiert ASCII zu FAX)
ASC_FAX.PRJ (das dazugehörige Turbo-C Project-File)
QFAX.INF (die Konfig-Datei für die fertigen Treiber)
TESTFAX.F01 (1/4 Seite im Faxformat)
PEEKFAX.PRG (zum 'Ansehen' von Faxseiten)
PEEKFAX.RSC
Erzeugen von Faxseiten mit jeder beliebigen Applikation
-------------------------------------------------------
"Ganz einfach nur Druckfunktion starten, Faxnummer eingeben
und ferig?" Ein kleines Object-Modul ermöglicht es einem
C-Programmierer mit jeder beliebigen Applikation Faxseiten
zu erzeugen. Auf das eher unbequeme Arbeiten mit Programmen,
die das Erzeugen von Faxseiten selbst übernehmen könnte man
dann verzichten. Das Besondere: dieses Modul ist
Public-Domain und die damit erzeugten Faxtreiber können
problemlos weitergegeben werden!
Ich möchte hier die nötigen Funktionsaufrufe
beschreiben, und die Benutzung anhand eines kleinen
C-Programmes demonstrieren. An dieser Stelle sollte nicht
verschwiegen werden, daß das Erzeugen von Faxseiten auf
anderen Betriebssystemen zentral übernommen wird (siehe
Next). Das ist natürlich besonders bequem. Durch den hier
vorgeschlagene Weg ergibt sich aber ein anderer,
entscheidenden Vorteil: jeder einzelne, der rund 4.000.000
Pixel auf einer Faxseite, wird von der Applikation gesetzt.
Dadurch können mögliche Qualtiätsverluste durch eine
Wandlung der vorgesehenen Auflösung nach 200 dpi sicher
vermieden werden. Faxtreiber für Calamus, CyPress und andere
Programme liegen schon vor.
WIE FUNKTIONIERT ES ?
Zunächst möchte ich die Funktionsweise eines solchen 'Fax-
Treibers' erläutern. Diese werden vom Benutzer wie normale
Druckertreiber nachgeladen und nehmen dann die Daten von der
Applikation entgegen. Allerdings wird zu diesem Zeitpunkt
noch nicht gefaxt. Statt dessen werden die Daten komprimiert
und in einer Art Warteschlange auf die Festplatte
zwischengespeichert. Der verwendete Huffman-Algorithmus
komprimiert die Daten auf bis zu 10% der ursprünglichen
Größe. Die Seiten in der Fax-Queue werden später auf Wunsch
und in einem Rutsch versendet. Ein positiver Effekt dieses
Verfahrens ergibt sich aus der Möglichkeit ein Fax mit Hilfe
mehrerer Applikationen zu erstellen. So könnte man z.B die
erste Seite mit der Textverarbeitung erstellen und eine
zweite Seite mit Calamus erstellen.
5 plus 1 Funktionen
Das Object-Modul 'QFAXDRV.O', setzt sich aus den hier
aufgeführten 6 Funktionen zusammen. In der Datei 'QFAXDRV.H'
befinden sich neben den Funktionsprototypen auch die
Definitionen für Fehlermeldungen.
int qfax_init (void)
Diese Funktion dient zur Initialisierung des Treibers und
sollte einmal, zu allererst aufgerufen werden. Parameter
werden hier keine übergeben. Wird (in Register D0) ein Wert
ungleich Null zurückgegeben, liegt ein Fehler vor. Der Wert
ERR_INIT deutet auf eine nicht vorhandene, bzw. fehlerhafte
Konfigurationsdatei. Die Rückgabe des Wertes ERR_PATH
bedeutet, daß der Pfad in der Konfiguration nicht gefunden
werden konnte.
int qfax_open (char *applic)
Zu Beginn einer neuen Seite wird diese Funktion aufgerufen.
Sie erstellt die Ausgabedatei inklusive Fax-Header. Als
Argument muß (in A0) ein Dateiname übergeben werden
(Null-Terminiert, nicht vergessen). Dieser sollte mindestens
6 aber maximal 8 Zeichen lang sein und auf die erzeugende
Applikation deuten (z.B.: 'CALFAX', 'CYPFAX' etc.). Ein
Return-Wert ungleich 0 deutet auch hier auf einen Fehler.
Der Wert ERR_CREATE weist darauf hin, daß nicht geschrieben
werden konnte.
int qfax_pix (unsigned char *pixptr, int lines)
Diese Funktion wird benutzt um Bitmap zu erzeugen.
Dabei wird in 'lines' angegeben, wie oft die Pixelzeile
in 'pixptr' wiederholt werden soll. In der Regel
wird also in 'lines' eine '1' übergegeben. Der Parameter
'pixptr' zeigt auf einen genau 216 Bytes großen
Speicherbereich, indem sich eine Zeile Pixel befinden. Die
Applikation stellt diesen Bereich zur Verfügung. 216 * 8 =
1728 Pixel pro Zeile sind das Standard-Format für die Breite
von 200 dpi-Faxseiten und müssen unbedingt eingehalten werden.
Evtl. muß die Vorlage gestaucht werden. Eine Vorlage in einer
Auflösung von 300 dpi muß also zuvor auf 2/3 gestaucht werden.
Nicht vergessen, daß dann auch die Vertikale im selben
Verhältniss gestaucht werden muß!
Die Pixelzeile wird nun komprimiert und gespeichert.
Hierbei benutzt der Treiber einen internen, 8 KByte großen
Cachespeicher. Diese Funktion gibt den Wert ERR_WRITE
zurück, wenn ein Fehler beim schreiben aufgetreten ist. Bei
fehlerfreier Funktion wird ein Wert größer '0' zurückgegeben
der aussagt, auf wieviele Bytes komprimiert wurde. Es spielt
absolut keine Rolle wie oft diese Funktion aufgerufen wird,
weil eine Faxseite beliebig lang bzw. kurz sein kann. 2240
Pixelzeilen ergeben eine Faxseite von 29.68 cm höhe (= DIN-A
4). Etwa 75 Aufrufe ergeben 1 cm Fax!
int qfax_text (char *string)
Diese Funktion wird benutzt um Text auf eine Faxseite zu
schreiben. Es wird ein im Modul integrierter Font verwendet,
der sich besonders für die Übertragung im Faxformat eignet.
Der Font erzeugt nämlich besonders 'wenig' Hufman-Code und
beschleunigt damit die Übertragung. Pro Textzeile werden 32
Pixelzeilen erzeugt. Auf eine A4-Seite maximal 70 Zeilen
Text. Pro Zeile können bis zu 98 Zeichen untergebracht
werden. Es dürfen keine Steuerzeichen, auch kein Linefeed
übergeben werden. Diese Funktion gibt ebenfalls den Wert
ERR_WRITE zurück, wenn ein Fehler beim Schreiben aufgetreten
ist. Bei fehlerfreier Funktion wird ein Wert größer '0'
zurückgegeben der aussagt, wieviel Bytes erzeugt wurden.
int qfax_close (void)
Diese Funktion wird am Seitenende aufgerufen. Sie füllt den
Fax-Header mit den richtigen Werten und schließt die Datei.
Ein Return-Wert ungleich '0' deutet auf einen Fehler beim
Schreiben. Wenn alles fehlerfrei funktioniert hat, kann die
nächste Seite geöffnet werden.
int qfax_clr (void)
Mit dieser Funktion kann die Queue, z.B. vor dem erzeugen
neuer Seiten, gelöscht werden. Wird danach eine neue
Faxseite angelegt, erhält diese die Erweiterung '.F01' im
Dateinamen. Die nächste Seite '.F02' usw.
Das geschieht ganz automatisch.
Der Treiber kann übrigens problemlos wieder entfernt werden.
Die Erzeugten Seiten werden in der Fax-Queue gespeichert,
was nichts anderes ist als ein Directory, das speziell dafür
angelegt wurde. Hier zum Beispiel der Inhalt dieses
Verzeichnisses nachdem drei Seite mit verschiedenen
Applikationen erzeugt wurden:
"CYPRESS .F01"
"ASCII .F02"
"CALAMUS .F03"
Für jede Seite wurde eine Datei angelegt. Die nächste Seite
würde die Erweiterung ".F04" erhalten. Der Dateiname vor der
Erweiterung spielt für das Versenden keine Rolle. Er gibt
dem Benutzer nur Auskunft darüber, welches Programm die
Seiten erzeugt hat.
FORMAT DER FAX-DATEI
--------------------
01-24 : reserved
25 : 01 = 1-Dim, 02 = 2-Dim
26-27 : Seiten in Pixelzeilen (sorry: INTEL-Format)
28-29 : Breite in Pixeln, z.Z. immer 1728 (sorry: INTEL-Format)
30 : Auflösung 0 = 100 dpi, 1 = 200 dpi
31-255 : reserved
256-eof : huffman-code
DEMO-PROGRAMME IN ANSI-C
------------------------
Die beiliegenden C-Sourcen 'MINIDEMO.C' und 'ASC_FAX.C' zeigen,
wie einfach die Benutzung der hier vorgestellten Funktionen ist.
Das Accessory "QFAX.ACC" gestattet das Versenden der
erzeugten Seiten an einen oder mehrere Empfänger. Die mit
dem Modul erzeugten Faxseiten und das Modul selbst dürfen
frei weitergegeben werden. Eine V e r m a r k t u n g solcher
Treiber bedarf der schriftlichen Genehmigung des Autors.
Neben den hier vorgestellten Möglichkeiten zum Erzeugen von
Faxseiten existiert ein erweitertes Modul, daß einer beliebigen
Applikation das direkte Versenden von Faxen gestattet.
Informationen hierzu erhalten Sie bei:
Computer & Design
Eppenhauser Straße 59
5800 Hagen-1
Telefon (02331) - 58 98 42
Telefax (02331) - 5 42 03
Wenn Sie bis hier hin gelesen haben, bedanke ich mich herzlich für
Ihre Geduld.
Tim Mehrvarz